// 二次分装axios请求库目的：
// 1. 统一管理axios请求配置、响应拦截、错误处理等，方便后续维护
// 2. 统一处理请求错误，统一提示错误信息
// 3. 请求拦截器，在请求头中携带公共的参数，如token等
// 4. 响应拦截器，统一处理响应数据，如将响应数据格式化为json、处理token失效等
// 5. 统一管理请求地址与方法，方便后续维护
import axios from 'axios'
import {ElMessage} from 'element-plus';
import { useUserStore} from '@/store/modules/user'

// 创建axios实例
const request = axios.create({
    baseURL: '/api',
    timeout: 5000
})

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 在请求头中携带公共的参数，如token等
       const userStore = useUserStore();
       if (userStore.userInfo.token) {
           config.headers.token = userStore.userInfo.token;
       }
       return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        // 统一处理响应数据，如将响应数据格式化为json、处理token失效等
        return response.data
    },
    error => {
        // 统一处理请求错误，统一提示错误信息
        const status = error.response.status;
        switch (status) {
            case 404:
                //错误提示信息
                ElMessage({
                    type: 'error',
                    message: '请求失败路径出现问题'
                })
                break;
            case 500 | 501 | 502 | 503 | 504 | 505:
                ElMessage({
                    type: 'error',
                    message: '服务器挂了'
                })
                break;
            case 401:
                ElMessage({
                    type: 'error',
                    message: '参数有误'
                })
                break;
        }
        console.log(error)
        return Promise.reject(error)
    }
)

export default request;